#include <iostream>
#include <stack>

using namespace std;

#define MAX_N 10000
stack<int> s;
char str[MAX_N + 5];
int match[MAX_N + 5] = {0};

int main(){
    cin >> (str + 1);
    for(int i = 1; str[i]; i++){
        switch (str[i]) {
        case '(':
        case '[':
        case '{': s.push(i); break;
        case ')':{
            if(!s.empty() && str[s.top()] == '('){
                match[s.top()] = i;
                // match[i] = s.top();
                s.pop();
            }else{
                s.push(i);
            }
        }break;
        case ']':{
            if(!s.empty() && str[s.top()] == '['){
                match[s.top()] = i;
                // match[i] = s.top();
                s.pop();
            }else{
                s.push(i);
            }
        }break;
        case '}':{
            if(!s.empty() && str[s.top()] == '{'){
                match[s.top()] = i;
                // match[i] = s.top();
                s.pop();
            }else{
                s.push(i);
            }
        }break;
        }
    }

    // for(int i = 1;str[i]; i++){
    //     printf("match[%d] = %d\n", i, match[i]);
    // }

    int temp_ans = 0, ans = 0, i = 1;
    while(str[i]){
        if(match[i]){
            // cout << "i = " << i << endl;
            temp_ans += (match[i] - i + 1);
            // cout << "match[" << i << "] ";
            i = match[i] + 1;
            // cout << "temp_ans = "<< temp_ans << " i = " << i << endl;
        }else{
            i += 1;
            temp_ans = 0;
        }
        if(temp_ans > ans) ans = temp_ans;
    }
    cout << ans << endl;
    return 0;
}